﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SanFranciscoModel.Materia;
using SanFranciscoModel.Docente;
using SanFranciscoModel.Intermedias;

namespace SanFrancisco
{
    
    public partial class ModificarAsignarDocenteMateria : Form
    {
        int _DNI;
        List<MateriaXDocente> _ListMateriaXDocenteAntes;
        List<Materia> _ListMateriaCorrecto = new List<Materia>();

        public ModificarAsignarDocenteMateria(int dni)
        {
            _DNI = dni;
            
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void AsignarDocenteMateria_Load(object sender, EventArgs e)
        {
            MateriaManager MateriaManager = new MateriaManager();
            DocenteManager DocenteManager = new DocenteManager();
            List<Materia> MateriaList = MateriaManager.getMateriasAll();
            Docente Docente = new SanFranciscoModel.Docente.Docente();
            
            
            //Creo los label y los combos segun lo que el docente posea
            List<MateriaXDocente> ListMateriaXDocente = MateriaManager.getMateriasXDocentebyDNIDocente(_DNI);
            _ListMateriaXDocenteAntes = ListMateriaXDocente;
            int contador = 40;

            foreach (MateriaXDocente mXd in ListMateriaXDocente)
            {
                Label MyLabel = new System.Windows.Forms.Label();
                MyLabel.Location = new System.Drawing.Point(20, 100 + contador);
                MyLabel.Name = mXd.DNIDocente.ToString();
                MyLabel.Size = new System.Drawing.Size(100, 21);
                MyLabel.TabIndex = 0;
                MyLabel.Text = MateriaManager.getMateriasByIdMateria(mXd.idMateria).Materia1;
                Controls.Add(MyLabel);

                // Adding the Click event.
                MyLabel.Click += new EventHandler(MyLabel_Click);



                //Combo
                ComboBox ComboBox = new System.Windows.Forms.ComboBox();
                ComboBox.Location = new System.Drawing.Point(130, 100 + contador);
                foreach (Materia m in MateriaList)
                {
                    if (m.Materia1 != MateriaManager.getMateriasByIdMateria(mXd.idMateria).Materia1)
                    {
                        bool flag = false;
                        foreach (MateriaXDocente md in ListMateriaXDocente)
                        {
                            if (md.idMateria == m.idMateria)
                            {
                                flag = true;
                            }
                        }
                        if (flag == false)
                        {
                            ComboBox.Items.Add(m.Materia1);
                            _ListMateriaCorrecto.Add(m);
                        }
                    }
                }

                ComboBox.Name = mXd.idMateria.ToString();
                ComboBox.Size = new System.Drawing.Size(100, 21);
                ComboBox.TabIndex = 0;
                ComboBox.Text = "";
                ComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
                Controls.Add(ComboBox);

                // Adding the Click event.
                ComboBox.Click += new EventHandler(ComboBox_Click);

                


                Button ButtonDelete = new System.Windows.Forms.Button();
                ButtonDelete.Location = new System.Drawing.Point(234, 100 + contador);
                ButtonDelete.Name = mXd.DNIDocente.ToString();
                ButtonDelete.Size = new System.Drawing.Size(21, 20);
                ButtonDelete.ImageIndex = mXd.idMateria;
                ButtonDelete.TabIndex = 0;
                ButtonDelete.Text = "X";
                Controls.Add(ButtonDelete);

                // Adding the Click event.
                ButtonDelete.Click += new EventHandler(ButtonDelete_Click);


                contador += 30;
            }

            //Creo los botones de guargar
            Button btnGuardar = new System.Windows.Forms.Button();
            btnGuardar.Location = new System.Drawing.Point(186, 30 + contador * 2);
            btnGuardar.Name = "btnGuardar";
            btnGuardar.Size = new System.Drawing.Size(75, 23);
            btnGuardar.TabIndex = 0;
            btnGuardar.Text = "Guardar";
            Controls.Add(btnGuardar);
            // Adding the Click event.
            btnGuardar.Click += new EventHandler(btnGuardar_Click);

            //Creo los botones de Salir
            Button btnSalir = new System.Windows.Forms.Button();
            btnSalir.Location = new System.Drawing.Point(110, 30 + contador * 2);
            btnSalir.Name = "btnSalir";
            btnSalir.Size = new System.Drawing.Size(75, 23);
            btnSalir.Text = "Cancelar";
            btnSalir.TabIndex = 0;
            Controls.Add(btnSalir);
            // Adding the Click event.
            btnSalir.Click += new EventHandler(btnSalir_Click);

            this.Size = new System.Drawing.Size(300, contador * 2 + 100);
            
            
            MateriaList = MateriaManager.getMateriasAll();

            //cmbMaterias.ValueMember = "idMateria";
            //cmbMaterias.DisplayMember = "Materia1";
            //cmbMaterias.DataSource = MateriaList;

            Docente = DocenteManager.getDocentebyDNI(_DNI);
            txtApellido.Text = Docente.Apellido;
            txtDni.Text = _DNI.ToString();
            txtNombre.Text = Docente.Nombre;

            //cargo el combo con lo que tiene el loco

        }

        private void MyLabel_Click(object sender, System.EventArgs e)
        {
        }

        private void btnGuardar_Click(object sender, System.EventArgs e)
        {
            MateriaManager mm = new MateriaManager();
            List<MateriaXDocente> ListMateriaXDocente = new List<MateriaXDocente>();
            List<int> ListMateriaAntes = new List<int>();
            bool flap = true;
            foreach (System.Windows.Forms.Control ctr in Controls)
            {
                if (ctr is ComboBox)
                {
                    if (ctr.Text.Equals(""))
                    {
                        flap = false;
                    }
                    else
                    {
                        MateriaXDocente mxd = new MateriaXDocente();
                        mxd.idMateria = mm.getMateriaByNombre(ctr.Text).idMateria;
                        mxd.DNIDocente = _DNI;
                        ListMateriaXDocente.Add(mxd);
                        ListMateriaAntes.Add(int.Parse(ctr.Name));
                    }
                }
            }
            if (flap == false)
                MessageBox.Show("Los campos vacios no seran modificados");

            MateriaManager MateriaManager = new MateriaManager();
            bool flag = false;
            foreach (MateriaXDocente md in ListMateriaXDocente)
            {
                //ComprobarAsignaciones
                DocenteManager dm = new DocenteManager();
                int cant = dm.getCantidadSegunDocenteMateri(md.idMateria, md.DNIDocente);
                
                
                if (cant > 0)
                {
                    MessageBox.Show("Imposible Eliminar la materia ("+ MateriaManager.getMateriasByIdMateria(md.idMateria).Materia1 +"). Antes debe eliminar el docente de los cursos a los que esta asignado con dicha materia");
                    flag = true;
                }
                
            }
            if (flag == false)
            {
                int contador = 0;
                foreach (MateriaXDocente md in ListMateriaXDocente)
                {
                    foreach(Materia m in _ListMateriaCorrecto)
                    {
                        
                            MateriaXDocente MateriaXDocente = new SanFranciscoModel.Intermedias.MateriaXDocente();
                            MateriaXDocente.DNIDocente = md.DNIDocente;
                            MateriaXDocente.idMateria = md.idMateria;
                            MateriaManager.updateMateriaXCurso(MateriaXDocente, ListMateriaAntes[contador]);
                    }
                    contador++;
                }
                MessageBox.Show("Materias Modificadas con Exito!");
                this.Close();
            }
        }

        private void btnSalir_Click(object sender, System.EventArgs e)
        {
            this.Close();
        }

        private void ComboBox_Click(object sender, System.EventArgs e)
        {
        }

        private void ButtonDelete_Click(object sender, System.EventArgs e)
        {
            Button a = new Button();
            a = (Button)sender;

            //ComprobarAsignaciones
            int idMateria= a.ImageIndex;
            int idDocente=int.Parse(a.Name);

            DocenteManager dm = new DocenteManager();
            int cant = dm.getCantidadSegunDocenteMateri(idMateria, idDocente);

            if (cant > 0)
            {
                MessageBox.Show("Imposible Eliminar la materia. Antes eliminar el docente de los cursos a los que esta asignado con dicha materia");
            }
            else
            {
                MateriaManager MateriaManager = new MateriaManager();
                MateriaXDocente MateriaXDocente = new SanFranciscoModel.Intermedias.MateriaXDocente();
                MateriaXDocente.DNIDocente = idDocente;
                MateriaXDocente.idMateria = idMateria;
                MateriaManager.deleteMateriaXCurso(MateriaXDocente);
                MessageBox.Show("Materia Eliminada");

                ModificarAsignarDocenteMateria ma = new ModificarAsignarDocenteMateria(idDocente);
                ma.StartPosition = FormStartPosition.CenterScreen;
                this.Hide();
                ma.ShowDialog();
            }
        }

    }
}
